Peterson法

識別再捕獲法として最初に思いつくのは、Petersen 法と呼ばれている方式である。100年以上前に、デンマークの魚類学者Petersonによって開発されたのでこの名前があるが、その後、鳥類学者のLincolnも同様の方法を報告したことからLincoln法とも呼ばれる。この方法では,1回だけ標識虫を放し(M匹としよう)充分に野生虫と混じり合った後(ただし標識虫が寿命で死んでしまうほど長く放置してはならない)、1回だけ大規模な再捕獲を実施する。このときの捕獲された非標識虫数(野生虫数)は\(n_1\)匹で、識別虫数が\(m_1\)匹であったとしよう。このとき次の比例式が成り立つ。(総野生虫+標識虫数、\(N\)) :(標識数、\(M\)) = (再捕獲野生虫+標識虫数、\(n_1\)) :(再捕獲識別虫数、\(m_1\))なので、もともといた合計個体数N(総野生虫+標識虫数)の推定値は、

\(\hat{N}=(Mn_1)/m_1\)

によって求めることが出来る。極めて単純で直感的だがPeteson法は、再捕獲される標識虫の数が少ないとき、個体数を過大推定してしまう。再捕獲識別虫数、\(m_1\)は、数学でいうところの超幾何分布に従うことが知られており、過大推定してしまうのは超幾何分布の特徴である。この偏りを補正するための修正式がChapman(1951)によって提唱されている。計算方法は、伊藤・村井(1977)に詳しい。

\(\hat{N}=\frac{(M+1)(n_1+1)}{m_1+1}\)

上図は、Peterson法の問題点を示している.再捕獲数が少ないと、推定値が過大評価になる上に精度が悪い.10,000匹の野生虫の中に200匹の標識虫を放飼した5万回のシミュレーション結果.真の値は10,200匹(細線).灰色のエリアは95%信頼区間、太線が推定値の平均値、点線はChapmanの補正推定値の平均値.ちなみに再捕獲総数がゼロに近くなると推定値が急激に小さくなるのは、標識虫の再捕獲がゼロの場合を除去して推定しているからである.

## 仮想のカメムシ調査結果
mark <- 200         ## 標識虫(野生虫に追加する)
recap.N <- 50       ## 再捕獲虫総数マーク有+マークなし(野生虫+標識虫)
recap.M <- 5        ## 再捕獲虫でマーク有(標識虫)

## Peterson法オリジナルの推定
estimate <- mark*recap.N/recap.M
print(paste("Peterson の推定値は", estimate, sep=":"))
## Chapmanの補正値は(こっちを使った方が良い)
estimate.chapman = (mark+1)*(recap.N+1)/(recap.M+1)-1
print(paste("Chapmanの補正値は", estimate.chapman, sep=":"))
## 95% 信頼区間の推定
variance = (mark+1)*(recap.N+1)*(mark-recap.M)*(recap.N-recap.M)/(recap.M+1)/(recap.M+1)/(recap.M+2)
print(paste("Chapman補正値の95%信頼区間は:", max(0, round(estimate.chapman-1.96*sqrt(variance), digits=1)), "から", round(estimate.chapman+1.96*sqrt(variance), digits = 1), sep=""))
## [1] "Peterson の推定値は:2000"
## [1] "Chapmanの補正値は:1707.5"
## [1] "Chapman補正値の95%信頼区間は:536.5から2878.5"

山村の一回放飼二回再捕獲法

山村の一回放飼二回再捕獲法では、1回だけ\(M\)匹の標識虫を放し、野生虫と混じり合って合計個体数がN匹になった後、再捕獲を2回実施する。1回目の調査で野生虫+標識虫合計\(n_1\)匹捕獲し、そのうち標識虫数が\(m_1\)匹だったとする。2回目の調査では野生虫+標識虫合計\(n_2\)匹捕獲し、そのうち標識虫数が\(m_2\)匹であったとする。再捕獲にはフェロモントラップに粘着版を設置したものなどを使用することが多く、これに対応して1回目に捕獲した標識虫\(m_1\)は、試験から除外されると想定している。このとき次の2つのケースを想定して総野生虫数を推定できる。

ケースA:総野生虫数が2回の再捕獲調査時点で同じである

ケースB:捕獲確率が2回の再捕獲調査時点で同じである

図

上図は、山村の一回放飼二回再捕獲法で仮定する2つのシナリオを示す.ケースAは、総野生虫数が2回の再捕獲調査時点で同じ場合で、ケースBは、捕獲確率が2回の再捕獲調査時点で同じ場合である.四角は全体個体数サイズを、楕円は標識虫数サイズを模式的に表している.

山村の不偏推定値は、その他の個体数推定法に比べて偏りが少なく精度も高いことが報告されているが、前提に合わない条件で推定すると当然ながら結果が大きくずれてしまう。例えば、合計個体数が大きく変化してしまう場合にケースAを当てはめたり、野生虫と標識虫の割合が大きく変わってしまうような場合にケースBを当てはめたりしてはいけない。

  • Yamamura, K. 2003. Population estimation by a one-release, two-capture experiment. Applied Entomology and Zoology 38:475-486.
## 山中アメリカシロヒトリ個体数推定実験(1996未発表データ)
mark <- 203         ## 標識虫(野生虫に追加する)
recap.N1 <- 455       ## 1回目捕獲虫総数(野生虫+標識虫)
recap.N2 <- 259       ## 2回目捕獲虫総数(野生虫+標識虫)
recap.M1 <- 36        ## 1回目捕獲虫でマークの付いているもの(標識虫)
recap.M2 <- 7         ## 2回目捕獲虫でマークの付いているもの(標識虫)


## ケースA(野外虫の個体数は期間通じて一定と見込まれる)
estimate.A <- mark*(recap.N1+1)*(recap.N1+2)*recap.M2/(recap.M1+1)/(recap.M1+2)/recap.N2+recap.N1
print(paste("山村ケースAの推定値は", round(estimate.A, digits = 1), sep=":"))
## 95% 信頼区間の推定
temp1 <- recap.M1*(2*recap.M1+3)/(recap.M1+1)/(recap.M1+2)
temp2 <- (1-recap.N1/estimate.A)*(1/recap.M1-1/recap.N1)
temp3 <- (1-recap.N2/estimate.A)*(1/recap.M2-1/recap.N2)
variance.A = ((estimate.A-recap.N1)^2)*(temp1^2*temp2+temp3)
print(paste("山村ケースAの95%信頼区間は:", max(0, round(estimate.A-1.96*sqrt(variance.A), digits=1)), "から", round(estimate.A+1.96*sqrt(variance.A), digits = 1), sep=""))

## ケースB(野外虫と標識虫の個体数割合は期間通じて一定と見込まれる)
estimate.B <- mark*(recap.N1+2)*recap.M2/(recap.M1+1)/(recap.M1+2)+recap.N1
print(paste("山村ケースBの推定値は", round(estimate.B, digits = 1), sep=":"))
## 95% 信頼区間の推定
M1.hat <- mark*recap.M2/(recap.M1+1)+recap.M1
U1.hat <- mark*(recap.N1-recap.M1)*recap.M2/(recap.M1+1)/(recap.M1+2)+(recap.N1-recap.M1)
temp1 <- (M1.hat-2*recap.M1-1)/(recap.M1+1)+(U1.hat-recap.N1+recap.M1)*(2*recap.M1+3)/(recap.M1+1)/(recap.M1+2)
temp2 <- (estimate.B-recap.N1)^2/recap.M2
temp3 <- U1.hat^2/(recap.N1-recap.M1)
variance.B = recap.M1*temp1^2+temp2+temp3
print(paste("山村ケースBの95%信頼区間は:", max(0, round(estimate.B-1.96*sqrt(variance.B), digits=1)), "から", round(estimate.B+1.96*sqrt(variance.B), digits = 1), sep=""))
## [1] "山村ケースAの推定値は:1268.2"
## [1] "山村ケースAの95%信頼区間は:608.9から1927.5"
## [1] "山村ケースBの推定値は:916.9"
## [1] "山村ケースBの95%信頼区間は:476から1357.8"

Jolly-Seber法

哺乳類など寿命が長い生物の場合、定期的に標識虫の放飼と再捕獲を複数回繰り返して、各時点での死亡率(増減率)と個体数を推定するJolly-Seber法を使うことが一般的である。下の表は実際にJolly(1965)の論文に記載されている調査データである。全13回の調査を行い、各時点で野生虫+マーク虫全個体\(N_i\)を捕獲して\(i\)時点毎にユニークな標識をつける。捕獲した時点で死んでしまったり弱ってしまったら除去するので放飼する数\(R_i\)は、\(N_i\)と一致しない。この表では、1回目の調査で54匹の野生虫を捕獲し、その全てにマークしている。2回目の調査では、146匹の野生虫+マーク虫が捕獲され、そのうち10匹がマーク虫であった。新たにマーク虫を含む143匹に2回目の識別マークして放飼した。同様に3回目の調査では、169匹の野生虫+マーク虫が捕獲され、そのうち3匹が1回目にマーク虫され2回目には捕獲されなかったマーク中で、34匹が2回目にマークされた虫であった。新たに1回目+2回目のマーク虫を含む164匹に3回目の識別マークして放飼した。

マークしただけ 再捕2回目 3回目 4回目 5回目 6回目 7回目 8回目 9回目 10回目 11回目 12回目 13回目
1回目の虫 NA 10 3 5 2 2 1 0 0 0 1 0 0
2回目 NA NA 34 18 8 4 6 4 2 0 2 1 1
3回目 NA NA NA 33 13 8 5 0 4 1 3 3 0
4回目 NA NA NA NA 30 20 10 3 2 2 1 1 2
5回目 NA NA NA NA NA 43 34 14 11 3 0 1 3
6回目 NA NA NA NA NA NA 56 19 12 5 4 2 3
7回目 NA NA NA NA NA NA NA 46 28 17 8 7 2
8回目 NA NA NA NA NA NA NA NA 51 22 12 4 10
9回目 NA NA NA NA NA NA NA NA NA 34 16 11 9
10回目 NA NA NA NA NA NA NA NA NA NA 30 16 12
11回目 NA NA NA NA NA NA NA NA NA NA NA 26 18
12回目 NA NA NA NA NA NA NA NA NA NA NA NA 35
13回目 NA NA NA NA NA NA NA NA NA NA NA NA NA
N_i 54 146 169 209 220 209 250 176 172 127 123 120 142
R_i 54 143 164 202 214 207 243 175 169 126 120 120 0

Jolly-Seber法は、野外の害虫を捕獲してマークし、放飼した後、再捕獲・放飼を繰り返すことを前提としている。Jolly-Seber法では、標識虫の生残率は観測時点に依存して変わってもよいが、標識された時点にかかわらずに一定であるという仮定を用いていている。標識日によって標識脱落率や生残率が異なる場合にはこの仮定が成立しないため、多回放飼の場面でも一回放飼型の推定法を用いたほうがよい場合がある。ところで、フェロモントラップ粘着版を使った調査では、捕獲した害虫を除去してしまう。そんな場合であっても、放飼する数\(R_i\)から除去したマーク虫を取り除き、新しくマークする害虫だけを記録することで対応できる。 Jolly-Seber法は、極めて面倒な計算を行うので、既存のパッケージやソフトウェアを使うのが手っ取り早い。ただし、一度は自分の手計算で実行して、その内容を充分に理解しておくと、自分なりにカスタマイズした標識再捕獲法を考える時に役に立つだろう。計算方法は伊藤・村井(1977)に詳しく載っている。

## 様々なパッケージがあるが、ここではJollyのアイデアを最もよく理解できるOgleのFSAパッケージを利用する
library(FSA)
## install.packages("FSA", dependencies = TRUE) ## FSAがなければインストールしてください。
## Jollyの論文のデータを手打ち
recap1 <- rep(NA,13)
recap2 <- c(10,rep(NA,12))
recap3 <- c(3,34,rep(NA,11))
recap4 <- c(5,18,33,rep(NA,10))
recap5 <- c(2,8,13,30,rep(NA,9))
recap6 <- c(2,4,8,20,43,rep(NA,8))
recap7 <- c(1,6,5,10,34,56,rep(NA,7))
recap8 <- c(0,4,0,3,14,19,46,rep(NA,6))
recap9 <- c(0,2,4,2,11,12,28,51,rep(NA,5))
recap10 <- c(0,0,1,2,3,5,17,22,34,rep(NA,4))
recap11 <- c(1,2,3,1,0,4,8,12,16,30,rep(NA,3))
recap12 <- c(0,1,3,1,1,2,7,4,11,16,26,NA,NA)
recap13 <- c(0,1,0,2,3,3,2,10,9,12,18,35,NA)
mb.top <- cbind(recap1,recap2,recap3,recap4,recap5,recap6,recap7,recap8,recap9,recap10,recap11,recap12,recap13)

# 集計値の計算
n <- c(54,146,169,209,220,209,250,176,172,127,123,120,142)  ## 捕獲数
R <- c(54,143,164,202,214,207,243,175,169,126,120,120,0)    ## マーク数
m <- apply(mb.top,2,sum, na.rm=TRUE)                        ## 総再捕獲数、jolly.topを列ごとに合計しただけ
u <- n-m                                                    ## 新野生虫捕獲数、総捕獲数-総再捕獲数
mb.bot <- rbind(m,u,n,R)

jolly.table=rbind(rbind(jolly.top, n), R)  # バインドして
# 列名、行名を再定義
colnames(jolly.table)  <- c("マークしただけ", "再捕2回目", "3回目", "4回目", "5回目", "6回目", "7回目", "8回目", "9回目", "10回目", "11回目", "12回目", "13回目")
row.names(jolly.table) <- c("1回目の虫", "2回目", "3回目", "4回目", "5回目", "6回目", "7回目", "8回目", "9回目", "10回目", "11回目", "12回目", "13回目", "N_i", "R_i")
(jolly(mb.top,mb.bot, type="Manly")$df)    ## 95%信頼区間を計算するためにManly法を使用、実行時括弧()をつけると結果を表示してくれる=print

Jolly-Seber法のアウトプット

データから単純に計算される値

Jolly-Seber法によって推定される値、

##           m   n   R   r   z     M M.se     N N.lci  N.uci   phi phi.lci  phi.uci     B
## recap1    0  54  54  24  NA    NA   NA    NA    NA     NA 0.646   0.389    0.783    NA
## recap2   10 146 143  80  14  34.9  4.8 466.2 301.3  979.4 1.009   0.705    1.100 290.5
## recap3   37 169 164  70  57 169.5 17.9 758.1 564.0 1210.0 0.864   0.627    1.028 293.0
## recap4   56 209 202  71  71 256.2 27.1 943.8 725.2 1427.8 0.564   0.422    0.658 400.2
## recap5   53 220 214 109  89 227.0 17.4 928.8 731.0 1353.0 0.834   0.629    0.901 101.5
## recap6   77 209 207 101 121 323.7 23.8 871.6 703.2 1219.3 0.790   0.602    0.866 109.2
## recap7  112 250 243 108 110 358.2 24.9 795.7 663.3 1060.8 0.651   0.499    0.712 134.4
## recap8   86 176 175  99 132 318.3 20.4 647.6 529.5  888.6 0.981   0.741    1.094 -11.6
## recap9  110 172 169  70 121 399.7 33.3 623.0 506.4  863.4 0.685   0.513    0.821  48.5
## recap10  84 127 126  58 107 314.3 27.6 473.3 375.7  681.9 0.880   0.638    1.096  82.8
## recap11  77 123 120  44  88 313.6 34.9 498.6 384.5  751.9 0.767   0.535    1.034  73.3
## recap12  72 120 120  35  60 273.7 36.2 453.6 342.0  712.0    NA      NA       NA    NA
## recap13  95 142   0  NA  NA    NA   NA    NA    NA     NA    NA      NA       NA    NA